﻿using IInject.Registration;
using IInject.Resolution;

namespace IInject.Extensibility
{
	/// <summary>
	/// 
	/// </summary>
	public interface IExtension
	{
		/// <summary>
		/// The method that is called when a <see cref="RegistryContext"/> is being registered.
		/// </summary>
		/// <param name="context">The context.</param>
		void ItemRegistering(RegistryContext context);

		/// <summary>
		/// The method that is called when a <see cref="RegistryContext"/> has been registered.
		/// </summary>
		/// <param name="context">The context.</param>
		void ItemRegistered(RegistryContext context);

		/// <summary>
		/// The method that is called when a <see cref="RegistryContext"/> is being resolved.
		/// </summary>
		/// <param name="context">The context.</param>
		/// <param name="dependency"></param>
		void ItemResolving(TypeDependency dependency);
	}
}
